﻿using BLL.Sgf;
using BLL.Utility;
using Entity.Models;
using Sgf.Utility;
using System;
using System.Web.UI.WebControls;

namespace Sgf.View
{
    public partial class RegistroDespesa : AbstractPage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            UcBotoesCadastro.btnSalvarClick += btnSalvar_Click;
            UcBotoesCadastro.btnLimparCLick += btnLimpar_CLick;
            pnErro.Visible = false;

            if (IsPostBack) return;
            PopulaTipoDespesa();
        }

        #region -- Botoes --
        private void btnLimpar_CLick(object sender, EventArgs e)
        {
            var campos = new Campos();
            campos.LimparTextBox(this);
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            var pEntity = GetEntity();
            try
            {
                using (var bll = new DespesaBLL())
                {
                    bll.Salvar(pEntity);
                    btnLimpar_CLick(sender, e);
                    ExibeMensagem("Operação realizada com sucesso");
                }
            }
            catch (EValidationException evx)
            {
                lbMsg.Text = evx.Message;
                btnLimpar_CLick(sender, e);
                pnErro.Visible = true;
            }
            catch (Exception ex)
            {
                throw new Exception("Despesa.aspx.cs.btnLimpar_CLick :: " + ex.Message, ex);
            }
        }
        protected void btnPopupSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                var pEntity = GetCategoriaDespesa();
                using (var bll = new CategoriaDespesaBLL())
                {
                    bll.Salvar(pEntity);
                    PopulaTipoDespesa();
                    btnLimpar_CLick(sender, e);
                    ExibeMensagem("Operação realizada com sucesso");
                }
            }
            catch (EValidationException evx)
            {
                lbMsg.Text = evx.Message;
                btnLimpar_CLick(sender, e);
                pnErro.Visible = true;
            }
            catch (Exception ex)
            {
                throw new Exception("Despesa.aspx.cs.btnPopupSalvar_Click :: " + ex.Message, ex);
            }
        }
        #endregion

        #region -- MetodoPrivados --
        private void PopulaTipoDespesa()
        {
            try
            {
                using (var bll = new CategoriaDespesaBLL())
                {
                    ddlTipoDespesa.DataSource = bll.BuscaTodos(Convert.ToInt32(Session["UsuarioId"].ToString()));
                    ddlTipoDespesa.DataBind();
                }
                ddlTipoDespesa.Items.Insert(0, new ListItem("(Selecione)", "0"));
            }
            catch (Exception ex)
            {
                throw new Exception("Despesa.aspx.cs.PopulaDespesa :: " + ex.Message, ex);
            }
        }

        private CategoriaDespesa GetCategoriaDespesa()
        {
            var pEntity = new CategoriaDespesa
            {
                Descricao = txtNovaModalidade.Text,
                UsuarioId = Convert.ToInt32(Session["UsuarioId"].ToString())
            };

            return pEntity;
        }

        private Despesa GetEntity()
        {
            var pEntity = new Despesa
            {
                CategoriaDespesaId = Convert.ToInt32(ddlTipoDespesa.SelectedValue),
                Valor = Convert.ToDecimal(txtValor.Text),
                DataDespesa = Convert.ToDateTime(txtDataPagamento.Text),
                UsuarioId = Convert.ToInt32(Session["UsuarioId"]),
                Observacao = txtObservacao.Text
            };
            return pEntity;
        }

        #endregion

    }
}